package com.heima.thread.impl.callable_future_demo;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Demo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        /**
         * 多线程的第三种实现方式
         * 特点: 可以获取到多线程运行的结果
         *
         * 1. 创建一个类MyCallable实现Callable接口
         * 2. 重写call (有返回值, 表示多线程运行的结果)
         *
         * 3. 创建MyCallable的对象 (表示多线程要执行的任务)
         * 4. 创建FutureTask的对象 (管理多线程运行的结果)
         * 5. 创建Thread类的对象, 并启动
         */

        // 创建MyCallable的对象
        Callable myC = new MyCallable();
        // 创建FutureTask的对象
        FutureTask<Integer> myF = new FutureTask<>(myC);
        // 创建Thread类的对象
        Thread t1 = new Thread(myF);
        t1.start();

        // 获取结果
        Integer res = myF.get();
        System.out.println(res);
    }
}
